//********************************************************
// Definition des param�tres relatifs � l'horloge timer
//********************************************************
#ifndef _gestionTempsMC_h_
#define _gestionTempsMC_h_

#include "timers.h"
#include "../Util/config.h"

// ********* d�finition des constantes **********************
//#define PERIODE_TICS_HORLOGE 100
#define VRAI 1
#define FAUX 0


#define TIMEOUT_RCV_CAR 1

#define WD_LIEN_SERIE 0
#define WD_COORD_SENSOR_APPLI 1
#define WD_TEMPO 2

//******************** prototypes fonctions *****************

/*********************************************************************************************//**
* \func: checkWatchDog
*
* \brief
* Cette fonction teste si la minuterie demandée est arrivée à échéance. Retourne VRAI si le délai est dépassé
* FAUX sinon.
*
* PARAMETRES :
* \param [in] numWD : le numéro du watch dog à vérifié
*************************************************************************************************/
char checkWatchDog(char numWD);

/*********************************************************************************************//**
* \func: serveurTimer0
*
* \brief
* Gère les intérruptions du timer 0 : remise à 0 du flag et rechargement de la valeur du compteur
*
*
* PARAMETRES :
* Aucun
*************************************************************************************************/
void serveurTimer0(void);

/*********************************************************************************************//**
* \func: initClock
*
* \brief
* Initialise le module de gestion temps
*
*
* PARAMETRES :
* Aucun
*************************************************************************************************/
char initClock (void);

/*********************************************************************************************//**
* \func: setWatchDog
*
* \brief
* Arme le watchdog passé en paramètre.
*
*
* PARAMETRES :
* \param [in] delaiEnSec : Le delai en seconde de l'échéance de la minuterie
* \param [in] numWD : Le numéro du watchdog à armé
*************************************************************************************************/
void setWatchDog(unsigned int delaiEnSec, char numWD);

/*********************************************************************************************//**
* \func: getTimeLeft
*
* \brief
* Retourne le temps restant avant l'échéance de la minuterie passée en paramètre
*
*
* PARAMETRES :
* \param [in] numWD : Le numéro du watchdog à observer.
*************************************************************************************************/
unsigned long int getTimeLeft(char numWD);

/*********************************************************************************************//**
* \func: getDate
*
* \brief
* Retourne la date courante du microcontroleur
*
*
* PARAMETRES :
* Aucun
*************************************************************************************************/
unsigned long int getDate(void) ;

/*********************************************************************************************//**
* \func: figeHorloge
*
* \brief
* Stop l'horloge.
*
*
* PARAMETRES :
* Aucun
*************************************************************************************************/
void figeHorloge(void);

/*********************************************************************************************//**
* \func: reprendHorloge
*
* \brief
* Relance l'horloge
*
*
* PARAMETRES :
* Aucun
*************************************************************************************************/
void reprendHorloge(void);

/*********************************************************************************************//**
* \func: delaySec
*
* \brief
* Cette fonction permet d'éffectué un delai bloquant d'un nombre de seconde passé en paramètre
*
*
* PARAMETRES :
* \param [in] sec : le temps en seconde à attendre
*************************************************************************************************/
void delaySec(int sec);

#if FOSC_INT_HF_16MHz
    #define PRESCALE_TIMER T0_PS_1_16
#elif FOSC_INT_HF_8MHz
    #define PRESCALE_TIMER T0_PS_1_8
#elif FOSC_INT_HF_4MHz
    #define PRESCALE_TIMER T0_PS_1_4
#elif FOSC_INT_HF_2MHz
    #define PRESCALE_TIMER T0_PS_1_2
#else
    #define PRESCALE_TIMER T0_PS_1_1
#endif

#endif
